2 流模型与扩散模型
在前一节中,我们将生成式建模形式化为从数据分布 中采样。此外,我们了解到,采样可以通过将来自简单分布(如高斯分布 )的样本 转换为目标分布 的样本来实现。在本节中,我们将描述如何通过模拟适当构建的微分方程来实现所需的转换。具体而言,流匹配模型和扩散模型分别涉及模拟常微分方程(ODEs)和随机微分方程(SDEs) 。因此,本节的目标是定义和构建这些生成式模型,因为它们将在讲义的其余部分中使用。具体来说,我们首先定义常微分方程和随机微分方程,并讨论它们的模拟。其次,我们将描述如何使用深度神经网络对常微分方程 / 随机微分方程进行参数化。这将引导我们对流模型的定义,以及从这类模型中采样的基本算法。在后续章节中,我们将探索如何训练这些模型。
2.1 流模型
我们从定义常微分方程(ODEs) 开始。常微分方程的解由一条轨迹(trajectory) 定义,即形如以下形式的函数: 该函数将时间 t 映射到 空间中的某个位置。每个常微分方程由一个向量场(vector field) 定义,即形如以下形式的函数:
也就是说,对于每个时间 t 和位置 x,我们得到一个向量 ,用于指定空间中的速度(见图 1)。常微分方程给轨迹施加了一个条件:我们希望轨迹 X “沿着向量场 的方向”,从点 开始。我们可以将这样的轨迹形式化为满足以下方程的解: 初 始 条 件 方程(1a)要求 的导数由 给出的方向来指定。方程(1b)要求我们在时间 时从 开始。现在我们可能会问:如果我们在 时从 开始,那么在时间 t 时我们会在哪里(即 是什么)?这个问题由一个称为 流(flow) 的函数来回答,该函数是常微分方程的解: 流 流 初 始 条 件 对于给定的初始条件 ,常微分方程的轨迹可通过 恢复。因此,直观地说,向量场、常微分方程和流是对同一对象的三种描述: 向量场 定义了常微分方程,其解就是流 。与所有方程一样,我们应该问问自己关于常微分方程的问题:解是否存在?如果存在,是否唯一?数学中的一个基本结论是,只要我们对 施加较弱的假设,对这两个问题的回答都是 “是” :
定理 3(流的存在性和唯一性) 如果 是连续可微的,且导数有界 ,那么方程(2)中的常微分方程有唯一解,由流 给出。在这种情况下,对于所有 t, 是一个微分同胚(diffeomorphism) ,即 是连续可微的,且其逆 也连续可微。
需要注意的是,在机器学习中,流的存在性和唯一性所需的假设几乎总是成立的,因为我们使用神经网络对 进行参数化,而它们的导数总是有界的。因此,定理 3 对你来说不应是个问题,而应是个好消息:在我们感兴趣的案例中,流是常微分方程的存在且唯一的解。证明可参见 [20, 4]。
示例 4(线性向量场) 让我们考虑一个简单的向量场示例 ,它是 x 的简单线性函数,即 (其中 )。那么函数: 定义了一个流 ,它求解了方程(2)中的常微分方程。你可以通过验证 并计算:
来自己验证这一点,其中(i)处我们使用了链式法则。在图 3 中,我们可视化了这种形式的流,它以指数形式收敛到 0。
模拟常微分方程(Simulating an ODE) 一般来说,如果 不像线性函数那么简单,就无法显式地计算流 。在这些情况下,人们会使用数值方法(numerical methods) 来模拟常微分方程。幸运的是,这是数值分析中一个经过充分研究的经典课题,存在多种强大的方法 [11] 。其中最简单且最直观的方法之一是欧拉方法(Euler method) 。在欧拉方法中,我们用 初始化,并通过以下公式更新: 其中 是步长超参数, 。对于本课程,欧拉方法已经足够好用。为了让你感受一下更复杂的方法,让我们考虑亨恩方法(Heun’s method) ,其更新规则定义为: 新 状 态 的 初 始 猜 测 用 当 前 状 态 和 猜 测 状 态 下 的 平 均 进 行 更 新 直观地说,亨恩方法的工作原理如下:它首先对下一步可能的状态做出一个初始猜测 ,但会通过更新后的猜测来修正最初采取的方向。
流模型(Flow models) 现在我们可以通过常微分方程构建生成式模型。记住,我们的目标是将简单分布 转换为复杂分布 。因此,模拟常微分方程是实现这种转换的自然选择。流模型 由以下常微分方程描述: 随 机 初 始 化 其中向量场 是一个带有参数 的神经网络 。目前,我们将把 视为一个通用的神经网络,即一个带有参数 、形如 的连续函数。稍后,我们将讨论神经网络架构的特定选择。 我们的目标是让轨迹的终点 具有分布 , 即: 其中 描述了由 诱导的流。不过需要注意:尽管它被称为流模型, 但神经网络对向量场进行参数化,而不是对流进行参数化 。为了计算流,我们需要模拟常微分方程。在算法 1 中,我们总结了从流模型中采样的过程。
2.2 扩散模型
随机微分方程(SDEs)通过随机轨迹(stochastic trajectories) 扩展了常微分方程的确定性轨迹。随机轨迹通常被称为随机过程(stochastic process) ,其定义为:
对于每个 , 是一个随机变量
是每次抽取 X 时的随机轨迹
特别地,当我们两次模拟同一个随机过程时,由于动态设计是随机的,可能会得到不同的结果。
布朗运动(Brownian Motion) 随机微分方程是通过 布朗运动(Brownian motion) 构建的,布朗运动是从物理扩散过程研究中产生的基本随机过程。你可以把布朗运动看作是连续的随机游走。让我们来定义它:布朗运动 是一个随机过程,满足 ,轨迹 是连续的,并且满足以下两个条件:
正态增量(Normal increments) :对于所有 , ,即增量具有高斯分布,方差随时间线性增加( 是单位矩阵)。
独立增量(Independent increments) :对于任意 ,增量 是相互独立的随机变量。
布朗运动也被称为维纳过程(Wiener process) ,这就是我们用 “W” 表示它的原因。我们可以用步长 近似模拟布朗运动,方法是设置 并通过以下公式更新: 在图 2 中,我们绘制了布朗运动的几个示例轨迹。布朗运动在随机过程研究中的核心地位,就如同高斯分布在概率分布研究中的地位一样。从金融到统计物理再到流行病学,布朗运动的研究有着超出机器学习的广泛应用。例如,在金融领域,布朗运动被用于对复杂的金融工具进行建模。而且,作为一种数学构造,布朗运动也很有趣:例如,虽然布朗运动的路径是连续的(所以你可以画它而无需提笔),但它们是无限长的(所以你永远画不完)。
从常微分方程到随机微分方程(From ODEs to SDEs) 随机微分方程的思想是通过添加由布朗运动驱动的随机动态,来扩展常微分方程的确定性动态。因为一切都是随机的,我们不能再像在方程(1a)中那样使用导数。因此,我们需要找到常微分方程的等价表述,使其不使用导数。为此,我们将常微分方程的轨迹 重新表述如下: 通 过 导 数 表 示 通 过 无 穷 小 更 新 表 示 其中 描述了小 时的可忽略函数,即满足 ,并且在(i)处我们只是使用了导数的定义。上面的推导只是重新表述了我们已经知道的内容: 常微分方程的轨迹 在每个时间步,都会沿着 方向迈出一小步。 现在,我们可以修改最后一个方程,使其具有随机性:随机微分方程的轨迹 在每个时间步,会沿着 方向迈出一小步,再加上来自布朗运动的一些贡献: 确 定 性 部 分 随 机 性 部 分 误 差 项 其中 描述扩散系数(diffusion coefficient) , 描述随机误差项,使得当 时,标准差 。上面的式子描述了一个随机微分方程(SDE) 。通常用以下符号表示: 初 始 条 件 然而,要始终记住,上面的 “ ” 符号只是方程(6)的一种非形式化表示。不幸的是, 随机微分方程不再有流映射 了。这是因为 的值不再由 完全确定,因为演化本身是随机的。 不过,与常微分方程类似,我们有:
定理 5(随机微分方程解的存在性和唯一性)
如果 是连续可微的,且导数有界,并且 是连续的,那么方程(7)中的随机微分方程有一个解,由唯一的随机过程 给出,满足方程(6)。
如果这是一门随机微积分课程,我们会花几个讲座来证明这个定理,并以完全严格的数学方法构建随机微分方程,即从基本原理出发构建布朗运动,并通过 随机积分(stochastic integration) 构建过程 。由于本课程聚焦于机器学习,若需更专业的技术推导,可参考 [18] 。最后,注意到常微分方程也可视为扩散系数 的随机微分方程特例(此时随机项消失)。因此,在本课程后续内容中,提及随机微分方程时,会将常微分方程视为其特殊情况。
示例 6(奥恩斯坦-乌伦贝克过程) 考虑扩散系数 为常数,且漂移项 ( 为常数),得到如下随机微分方程: 上述随机微分方程的解 被称为奥恩斯坦-乌伦贝克(OU)过程 。我们在图 3 中对其可视化。向量场 会推动过程回归到中心 0(形象地说,“我往哪个方向推,它就总往反方向走” ),而扩散系数 会不断为其添加噪声。当模拟时间 时, 该过程会收敛到高斯分布 。注意,当 时,就退化为我们在方程(3)中研究过的、具有线性向量场的流模型。
模拟随机微分方程(Simulating an SDE) 如果你目前对随机微分方程的抽象定义理解困难,别担心。有一种更直观的思考方式,就是回答 “如何模拟随机微分方程” 这个问题。最简单的模拟方案是欧拉-马里亚纳方法(Euler - Maruyama method) ,它对随机微分方程的意义,就如同欧拉方法对常微分方程的意义。使用欧拉 - 马里亚纳方法,我们用 初始化,然后通过以下公式迭代更新: 其中 是步长超参数, 。简而言之,用欧拉 - 马里亚纳方法模拟时,我们先沿着 方向迈出一小步,再添加一小部分由 缩放的高斯噪声。在本课程相关实验(如配套实验课)中模拟随机微分方程时,我们通常会采用欧拉 - 马里亚纳方法。
扩散模型(Diffusion Models) 现在,我们可以像构建基于常微分方程的生成式模型那样,构建基于随机微分方程的生成式模型。记住,我们的目标是将简单分布 转换为复杂分布 。与常微分方程类似,用 随机初始化后模拟随机微分方程,是实现这种转换的自然选择。为了对该随机微分方程进行参数化,我们可以简单地对其核心要素 —— 向量场 —— 用神经网络 进行参数化。
因此,扩散模型 可表示为: 随 机 初 始 化
在算法 2 中,我们描述了用欧拉 - 马里亚纳方法从扩散模型中采样的过程。我们将本节内容总结如下。
总结 7(随机微分方程生成式模型) 在本文档中,扩散模型 由带有参数 的神经网络 构成,该网络对向量场进行参数化,同时还有一个固定的扩散系数 :
神经网络 : , ,带有参数
固定项 : ,
为了从我们的随机微分方程模型中获取样本(即生成物体),过程如下:
初始化 : ,用简单分布初始化,如高斯分布
模拟 : ,模拟从 0 到 1 的随机微分方程
目标 : ,目标是让 服从分布
当 时,扩散模型就是流模型 。
3 构建训练目标
在前一节中,我们构建了流模型和扩散模型,通过模拟常微分方程 / 随机微分方程得到轨迹 ,形式如下: ( 流 模 型 ) ( 扩 散 模 型 ) 其中 是神经网络, 是固定扩散系数 。显然,若随机初始化神经网络参数 并模拟常微分方程 / 随机微分方程,结果会毫无意义。与机器学习常规流程一致,我们需训练神经网络,通过最小化损失函数 (如均方误差 )实现: 训 练 目 标 这里 是我们期望逼近的训练目标 。推导训练算法分两步,本章先推导训练目标 的方程,下一章描述逼近该训练目标的算法。和神经网络 类似,训练目标本身应是向量场 且需实现我们期望 达成的功能:将噪声转换为数据。因此,本章目标是推导训练目标 的公式,使对应的常微分方程 / 随机微分方程能将 转换为 。过程中会涉及数学物理和随机微积分的两个基本结论:连续性方程(continuity equation) 和福克 - 普朗克方程(Fokker - Planck equation) 。与之前一致,我们先针对常微分方程描述关键思想,再推广到随机微分方程。
说明 8
推导流模型和扩散模型的训练目标有多种方法。我们介绍的方法兼具通用性与简洁性,与当前最先进模型接轨,但可能和你之前见过的扩散模型的旧表述不同。后续会讨论其他形式。
3.1 条件概率路径与边缘概率路径
构建训练目标 的第一步是指定概率路径(probability path) 。直观而言,概率路径定义了从噪声分布 到数据分布 的渐进插值(见图 4 )。
本节解释其构建方式。对于数据点 ,记 为狄拉克 delta “分布” ,它是最简单的分布,采样时始终返回 z(即确定性分布 )。条件(插值)概率路径 是 上的一组分布 ,满足: 对 所 有 换言之,条件概率路径将单个数据点逐步转换为分布 (见图 4 )。可将概率路径视为分布空间中的轨迹。每个条件概率路径 会诱导出边缘概率路径(marginal probability path) ,其定义为:先从数据分布采样数据点 ,再从 采样得到的分布,即: 从 边 缘 路 径 采 样 边 缘 路 径 的 概 率 密 度 需注意,我们知道如何从 采样,但由于积分难以计算,无法得知密度值 。自行验证:因方程(12)中对 的条件限制,边缘概率路径 在 和 间插值: 且 噪 声 数 据 插 值
示例 9(高斯条件概率路径) 一种极为常用的概率路径是高斯概率路径 ,也是去噪扩散模型采用的概率路径。设 为噪声调度器(noise schedulers) :两个连续可微的单调函数,满足 且 。定义条件概率路径: 高 斯 条 件 路 径 根据对 和 施加的条件,有: 这里利用了 “方差为 0、均值为 z 的正态分布就是 ” 这一事实。因此,对 ,该 选择满足方程(12),是有效的条件插值路径。高斯条件概率路径具备若干实用性质,与我们的目标高度契合,因此在本节剩余部分,将其作为条件概率路径的典型示例。在图 4 中,展示了其在图像上的应用。从边缘路径 采样可表示为: 从 边 缘 高 斯 路 径 采 样 直观来看,上述过程在 t 较小时添加更多噪声,直到 时,仅剩下噪声。在图 5 中,展示了高斯噪声与简单数据分布间的此类插值路径示例。
3.2 条件向量场与边缘向量场
接下来,利用刚定义的概率路径 构建流模型的训练目标 。思路是从可手动解析推导的简单组件构建 。
定理 10(边缘化技巧)
对每个数据点 ,设 为条件向量场(conditional vector field) ,定义为:对应的常微分方程轨迹满足条件概率路径 ,即: 那么,边缘向量场(marginal vector field) 定义为: 它遵循边缘概率路径,即: 特别地,对该常微分方程,有 ,因此可称 “将噪声 转换为数据 ” 。
在证明边缘化技巧(定理 10 )前,先说明其有用性:该定理允许我们从条件向量场构建边缘向量场,大幅简化了寻找训练目标公式的问题,因为我们通常可手动解析推导(通过简单代数运算)满足方程(18)的条件向量场 。以高斯概率路径的示例,推导对应的条件向量场 来说明。
示例 11(高斯概率路径的目标常微分方程) 如前所述,设 ,其中 是噪声调度器(见方程(16) )。记 , 分别为 和 对时间的导数。在此,我们要证明由下式给出的条件高斯向量场(conditional Gaussian vector field) : 是定理 10 意义上有效的条件向量场模型:若 ,其常微分方程轨迹 满足 。在图 6 中,通过对比条件概率路径的真实样本与该流的模拟常微分方程轨迹样本,直观验证了分布匹配。现进行证明。
图 6 对定理 10 进行了可视化说明:用常微分方程模拟概率路径。蓝色背景为数据分布 ,红色背景为高斯分布 。第一行:条件概率路径。左:条件路径 的真实样本;中:常微分方程随时间的样本;右:用方程(21)中的 模拟常微分方程得到的轨迹。第二行:模拟边缘概率路径。左:边缘路径 的真实样本;中:学习到的边缘常微分方程的样本;右:用边缘向量场 模拟常微分方程得到的轨迹。可见,条件向量场遵循条件概率路径,边缘向量场遵循边缘概率路径。
证明 :先定义条件流模型 ,令: 若 是初始值 时, 对应的常微分方程轨迹,根据定义: 由此得出,轨迹的分布与条件概率路径一致(即满足方程(18) )。接下来,从 中提取向量场 。根据流的定义(方程(2b) ),有: 对 所 有 对 所 有 对 所 有 对 所 有 其中(i)处使用了 的定义(方程(22) );(ii)处对 x 重新参数化,令 ;(iii)处进行了简单代数运算。最后一个方程就是方程(21)中定义的条件高斯向量场。这就证明了该结论。也可通过将其代入本节后续介绍的连续性方程,双重验证是否满足定理 10 。
本节剩余部分将通过连续性方程(continuity equation) 证明定理 10,连续性方程是数学和物理中的基本结论。为解释它,需用到散度算子(divergence operator) ,定义为:
定理 12(连续性方程)
考虑一个流模型,其向量场为 ,且 。那么,对于所有 , 当且仅当: 对 所 有 其中 表示 对时间的导数 。方程 24 被称为连续性方程 。
对于有数学基础的读者,附录 B 中给出了连续性方程的自包含证明。在继续深入之前,让我们尝试直观理解连续性方程。左侧的 描述了概率 随时间的变化情况。直观地说,这种变化应该对应于概率质量的净流入。对于流模型,粒子 沿着向量场 运动。正如你可能从物理知识中回忆到的,散度衡量了向量场的净流出。因此,负散度 衡量了概率质量的净流入。用当前位于 x 处的总概率质量对其进行缩放,得到 ,它衡量了概率质量的总流入。由于概率质量是守恒的,方程左右两侧应该相等!现在,我们从定理 12 出发来证明边缘化技巧。
证明 :根据定理 12,我们需要证明如方程(19)所定义的边缘向量场 满足连续性方程。我们可以通过直接计算来做到这一点: 其中:
(i)处使用了方程(13)中 的定义;
(ii)处对条件概率路径 使用了连续性方程;
(iii)处交换了积分和散度算子的顺序(利用方程(23)中散度的线性性质);
(iv)处乘以并除以 ;
(v)处使用了方程(19)中 的定义 。
在常微分方程的情况中,上述推导表明连续性方程得到了满足。根据定理 12,这足以推导出方程(20),证明完毕。
3.3 条件得分函数与边缘得分函数
我们刚刚成功构建了流模型的训练目标。现在,我们将这一思路推广到随机微分方程(SDEs)。为此,我们定义 的边缘得分函数(marginal score function) 为 。我们可以用它来将上一节的常微分方程(ODE)推广到随机微分方程,如下述结论所示。
定理 13(随机微分方程扩展技巧)
如前所述定义条件向量场 和边缘向量场 。那么,对于扩散系数 ,我们可以构建一个遵循相同概率路径的随机微分方程: 特别地,对于该随机微分方程,有 。如果我们用条件概率路径 和向量场 替换边缘概率 和向量场 ,同样的等式也成立。
我们在图 7 中对该定理进行了说明。定理 13 中的公式很有用,因为与之前类似,我们可以通过条件得分函数(conditional score function) 来表示边缘得分函数: 而条件得分函数 通常是我们可以解析求解的,如下例所示。
示例 14(高斯概率路径的得分函数) 对于高斯路径 ,我们可以利用高斯概率密度的形式(见方程(8) )得到: 注意,该得分是 x 的线性函数,这是高斯分布的一个独特特征。
在本节剩余部分,我们将通过福克 - 普朗克方程(Fokker - Planck Equation) 证明定理 13,该方程将连续性方程从常微分方程推广到了随机微分方程。为此,我们首先通过下式定义拉普拉斯算子(Laplacian operator) :
定理 15(福克 - 普朗克方程)
设 为概率路径,考虑如下随机微分方程: 那么,对于所有 , 服从分布 当且仅当福克 - 普朗克方程(Fokker - Planck equation) 成立: 对 所 有 福克 - 普朗克方程的自包含证明可在附录 B 中找到。注意,当 时,可从福克 - 普朗克方程推导出连续性方程。额外的拉普拉斯项 一开始可能难以理解。熟悉物理的人会注意到,该相同项也出现在热传导方程中(而热传导方程实际上是福克 - 普朗克方程的一个特例 )。热量在介质中扩散,我们添加了一个扩散过程(不是物理扩散,而是数学扩散 ),因此添加了这个额外的拉普拉斯项。现在,我们使用福克 - 普朗克方程来证明定理 13。
定理 13 的证明 :根据定理 15,我们需要证明方程(25)中定义的随机微分方程满足 的福克 - 普朗克方程。我们可以通过直接计算来证明: 其中:
(i)处使用了连续性方程;
(ii)处添加并减去了相同项;
(iii)处使用了拉普拉斯算子的定义(方程(29) );
(iv)处使用了 ;
(v)处使用了散度算子的线性性质。
上述推导表明,方程(25)中定义的随机微分方程满足 的福克 - 普朗克方程。根据定理 15,这意味着对于 ,有 ,符合预期。证明完毕。
说明 16(朗之万动力学) 当概率路径是静态的(即对于固定分布 p,有 )时,上述构造有一个著名的特例。在这种情况下,我们令 ,得到随机微分方程:
这通常被称为朗之万动力学(Langevin dynamics) 。 是静态的意味着 。根据定理 13,立即可以得出这些动力学满足定理 13 中静态路径 的福克 - 普朗克方程。因此,我们可以得出结论:p 是朗之万动力学的平稳分布,即: 与许多马尔可夫链一样,在相当一般的条件下(见 3.3 节 ),这些动力学会收敛到平稳分布 p 。也就是说,如果我们选择 ,使得在 的条件下 ,那么朗之万动力学会收敛到 p 。这一事实使得朗之万动力学非常有用,它相应地成为了例如分子动力学模拟以及贝叶斯统计和自然科学中许多其他马尔可夫链蒙特卡罗(MCMC)方法的基础。
现在,我们总结本节的结果。
总结 17(训练目标的推导)
流模型的训练目标是边缘向量场(marginal vector field) 。为了构建它,我们选择一个条件概率路径(conditional probability path) ,满足 , 。接下来,找到一个条件向量场(conditional vector field) ,使得其对应的流 满足: 或者等价地, 满足连续性方程。然后,由下式定义的边缘向量场(marginal vector field) : 遵循边缘概率路径,即: 特别地,对于该常微分方程,有 ,因此 按预期 “将噪声转换为数据” 。
推广到随机微分方程(Extending to SDEs) :对于与时间相关的扩散系数 ,我们可以将上述常微分方程推广到具有相同边缘概率路径的随机微分方程: 其中 是边缘得分函数(marginal score function) :
特别地,对于上述随机微分方程的轨迹 ,有 ,因此该随机微分方程 “将噪声转换为数据”,符合预期。一个重要的例子是高斯概率路径(Gaussian probability path) ,其公式如下: 其中,噪声调度器 是连续可微的单调函数,满足 且 。
4 训练生成式模型
在前两节中,我们展示了如何构建由神经网络给出向量场 的生成式模型,并推导出了训练目标 的公式。在本节中,我们将描述如何训练神经网络 以逼近训练目标 。首先,我们再次将范围限定在常微分方程(ODEs),从而得到流匹配(flow matching) 。其次,我们解释如何通过得分匹配(score matching) 将该方法推广到随机微分方程(SDEs)。最后,我们考虑高斯概率路径的特殊情况,从而得到去噪扩散模型(denoising diffusion models) 。有了这些工具,我们终于能得到一个端到端的流程,用于训练基于常微分方程和随机微分方程的生成式模型并进行采样。
4.1 流匹配
如前所述,考虑由下式给出的流模型: 流 模 型 我们知道,希望神经网络 等于边缘向量场 。换句话说,我们希望找到参数 ,使得 在下面的内容中,记 为区间 上的均匀分布, 为随机变量的期望值。要使 ,一种直观的方法是使用均方误差(mean-squared error) ,即流匹配损失(flow matching loss) ,定义如下: 其中 是边缘概率路径,(i)处使用了方程(13)给出的 的采样过程。直观来看,流匹配损失的工作方式是:首先,从 中随机抽取一个时间 t ;其次,从我们的数据集中随机抽取一个点 z ,从 中采样(例如,通过添加一些噪声 ),并计算 ;最后,计算神经网络的输出与边缘向量场 之间的均方误差。不幸的是,我们的工作尚未完成。虽然根据定理 10,我们知道 的公式: 但由于上述积分难以计算,我们无法高效地计算它。相反,我们将利用条件速度场(conditional velocity field) 可计算的这一事实。为此,定义条件流匹配损失(conditional flow matching loss) : 注意与方程(41)的区别:我们使用条件向量场 代替了边缘向量场 。由于我们有 的解析公式,因此可以轻松地最小化上述损失。但等等,针对我们关心的边缘向量场,对条件向量场进行回归有什么意义呢?事实证明,通过显式地对可计算的条件向量场进行回归,我们隐式地对难以计算的边缘向量场进行了回归。下一个结论使这种直观认识变得精确。
定理 18 边缘流匹配损失等于条件流匹配损失加上一个常数。 即: 其中 C 与 无关。因此,它们的梯度相等: 因此,使用例如随机梯度下降(SGD)最小化 ,等价于以相同方式最小化 。特别地,对于 的极小值点 ,将有 (假设参数化具有无限表达能力 )。
证明 :证明过程通过将均方误差展开为三个分量并消去常数项来进行: 其中(i)由定义得出,(ii)使用了公式 ,(iii)定义了常数 ,(iv)使用了方程(13)给出的 的采样过程。现在重新表示第二个求和项: 其中(i)将期望值表示为积分,(ii)使用了方程(43),(iii)利用了积分的线性性质,(iv)将积分表示为期望值。注意,这实际上是证明的关键步骤。等式的开头使用了边缘向量场 ,而结尾使用了条件向量场 。将其代入 的方程中: 其中(i)代入了推导得到的方程,(ii)添加并减去了相同的值,(iii)再次使用了公式 ,(iv)定义了与 相关的常数。这就完成了证明。
一旦 经过训练,我们就可以模拟流模型: 例如,通过算法 1 得到样本 。整个流程在文献中被称为流匹配(flow matching) [14, 16, 1, 15] 。训练过程总结在算法 5 中,并在图 9 中可视化。现在,我们针对高斯概率路径的选择,实例化条件流匹配损失:
示例 19(高斯条件概率路径的流匹配) 回到高斯概率路径 的示例,我们可以通过以下方式从条件路径中采样: 如方程(21)中推导的,条件向量场 由下式给出: 其中 和 分别是对时间的导数。代入该公式,条件流匹配损失可表示为: 其中(i)代入了方程(46)并将 x 替换为 。注意 的简洁性:我们采样一个数据点 z ,采样一些噪声 ,然后计算均方误差。对于 和 的特殊情况,进一步具体化。对应的概率 有时被称为(高斯)CondOT 概率路径。此时, , ,因此:
许多著名的最先进模型都使用这种简单而有效的流程进行训练,例如 Stable Diffusion 3、Meta 的 Movie Gen Video,可能还有许多其他专有模型。在图 9 中,我们在一个简单示例中对其进行可视化,并在算法 5 中总结训练过程。
4.2 得分匹配
现在,我们将刚刚得到的算法从常微分方程推广到随机微分方程。记住,我们可以通过下式将目标常微分方程推广到具有相同边缘分布的随机微分方程: 其中 是边缘向量场, 是通过下式表示的边缘得分函数(marginal score function) : 为了逼近边缘得分 ,我们可以使用一个神经网络,称之为得分网络(score network) 。与之前类似,我们可以设计得分匹配损失(score matching loss) 和条件得分匹配损失(conditional score matching loss) : 得 分 匹 配 损 失
条 件 得 分 匹 配 损 失
同样,区别在于使用边缘得分 与使用条件得分 。如前所述,理想情况下我们希望最小化得分匹配损失,但由于不知道 ,无法直接进行。但与之前类似,条件得分匹配损失是一个可行的替代方案:
定理 20 得分匹配损失等于条件得分匹配损失加上一个常数: 其中 C 与参数 无关。因此,它们的梯度相等: 特别地,对于极小值点 ,将有 。
证明 :注意到 的公式(方程(51) )与 的公式(方程(43) )形式相同。因此,证明过程与定理 18 的证明相同,只需将 替换为 即可。证明完毕。
上述流程描述了训练扩散模型的常规流程。训练完成后,我们可以选择任意扩散系数 ,然后模拟随机微分方程: 以生成样本 。理论上,在完美训练的情况下,每个 都应生成样本 。但在实践中,我们会遇到两种类型的误差:(1)模拟随机微分方程时产生的数值误差;(2)训练误差(即模型 并不完全等于 )。因此,存在一个最优的未知噪声水平 ,可以通过测试不同的经验值来确定(例如,参见 [1, 12, 17] )。乍一看,可能会觉得同时训练两个不同的网络 和 (例如,我们希望训练扩散模型而非流模型 )是个缺点。然而,注意到我们通常可以在一个网络中直接将 和 作为两个输出,因此额外的计算开销通常很小。此外,对于高斯概率路径的特殊情况,我们即将看到 和 可以相互转换,因此无需分别训练它们。
说明 21(去噪扩散模型) 如果你熟悉扩散模型,你可能遇到过 “去噪扩散模型(denoising diffusion model)” 这一术语。这个术语如今非常流行,以至于大多数人不再使用 “去噪” 一词,而简单地用 “扩散模型(diffusion model)” 来描述使用高斯概率路径 的模型。然而,需要注意的是,如果你阅读一些最早的扩散模型论文,这可能并不直观:它们使用不同的时间约定(时间是反转的 ),因此你需要首先对时间进行重新缩放,并通过所谓的前向过程(forward processes) 构建概率路径(我们将在 4.3 节中讨论 )。
示例 22(去噪扩散模型:高斯概率路径的得分匹配) 首先,针对 的情况,实例化去噪得分匹配损失。如方程(28)中推导的,条件得分 的公式为: 代入该公式,条件得分匹配损失变为: 其中(i)代入了方程(46)并将 x 替换为 。注意,得分网络 本质上学习预测用于破坏数据样本 z 的噪声。因此,上述训练损失也被称为去噪得分匹配(denoising score matching) ,并且是最早用于训练扩散模型的方法之一。很快人们意识到,上述损失在数值上不稳定(当 时, 项会导致问题,即当添加的噪声足够少时 )。在关于去噪扩散模型的一些早期工作中(参见《去噪扩散概率模型(Denoising Diffusion Probabilistic Models)》 [9] ),因此建议在损失中去掉常数 ,并将 重新参数化为噪声预测器网络(noise predictor network) ,即: 如前所述,网络 本质上学习预测用于破坏数据样本 z 的噪声。在算法 4 中,我们总结训练过程。
除了简单性之外,高斯概率路径还有另一个有用的性质:通过学习 或 ,我们也会自动学习 ,反之亦然:
命题 1(高斯概率路径的转换公式) 对于高斯概率路径 ,条件(或边缘)向量场可以转换为边缘(或条件)得分,反之亦然:
其中,上述边缘向量场 的公式在文献中被称为概率流常微分方程(probability flow ODE) (更准确地说,是对应的常微分方程 )。
证明 :对于条件向量场和条件得分,我们可以推导: 其中(i)处进行了简单代数运算。通过积分,对于边缘流向量场和边缘得分函数,相同的恒等式也成立: 其中(i)处使用了方程(51)。证明完毕。
我们可以使用转换公式,通过以下方式将得分网络 和向量场网络 相互参数化: 类似地,只要 (对于 ,该式始终成立 ),则有: 利用这种参数化,可以证明得分匹配损失和条件流匹配损失在相差一个常数的意义下是相同的。我们得出结论:对于高斯概率路径,无需分别分别训练边缘得分和边缘向量场,因为了解其中一个就足以计算另一个。特别地,我们可以选择使用流匹配或得分匹配来训练模型。在图 10 中,我们直观地比较了通过得分匹配逼近的得分和使用方程(55)参数化的得分。
图 10 :两种不同方式得到的得分对比。上:通过得分匹配独立学习得到的得分场 的可视化(见算法 4 )。下:使用方程(55)参数化得到的得分场 的可视化。
如果我们训练了一个得分网络 ,根据方程(52),我们知道可以使用任意 从随机微分方程中采样: 以得到样本 (除去训练和模拟误差 )。这对应于从去噪扩散模型进行随机采样(stochastic sampling from a denoising diffusion model) 。
4.3 扩散模型文献指南
文献中围绕扩散模型和流匹配存在一整个模型家族。当你阅读这些论文时,可能会发现与本课程呈现材料的方式不同(但等价)。这有时会让阅读这些论文变得有点混乱。因此,我们想对各种框架及其差异进行简要概述,并将它们置于历史背景中。这对于理解本文档的其余部分不是必需的,而是为了你阅读文献时提供支持。
离散时间与连续时间
早期的去噪扩散模型论文 [28, 29, 9] 没有使用随机微分方程(SDEs),而是构建了离散时间 的马尔可夫链,即时间步为 。时至今日,你会发现文献中有很多工作使用这种离散时间公式。虽然这种构造因其简单性而具有吸引力,但时间离散方法的缺点是,它迫使你在训练前选择时间离散化方式。此外,损失函数需要通过证据下界(ELBO) 来近似,顾名思义,它只是我们实际想要最小化的损失的一个下界。后来,Song 等人 [32] 表明,这些构造本质上是连续时间随机微分方程的近似。此外,在连续时间情况下,证据下界变得紧密(即它不再是下界 —— 例如,注意定理 18 和定理 20 是等式,而不是下界,这在离散时间情况下会有所不同 )。这使得随机微分方程构造更受欢迎,因为它在数学上被认为 “更简洁”,并且可以通过常微分方程 / 随机微分方程采样器控制模拟误差,这在训练后是一致的。然而,需要注意的是,两种模型都采用相同的损失,并且本质上没有区别。
“前向过程” 与概率路径
第一波去噪扩散模型 [28, 29, 9, 32] 没有使用 “概率路径” 这一术语,而是通过所谓的前向过程(forward process) 构建数据点 的加噪过程。这是一种形式为: 的随机微分方程。其思想是,在抽取一个数据点 后,模拟前向过程,从而破坏或 “加噪” 数据。前向过程被设计为,当 时,其分布收敛到高斯分布 。换句话说,对于 ,近似有 。注意,这本质上对应于一个概率路径:给定 的条件分布 是一个条件概率路径 ,而对 边缘化 得到的分布是边缘概率路径 。然而,需要注意的是,通过这种构造,为了训练模型以避免模拟随机微分方程,我们需要以闭合形式知道 的分布。这本质上限制了向量场 ,使得我们可以以闭合形式知道 的分布。因此,在整个扩散模型文献中,前向过程中的向量场始终是仿射形式,即 ,其中 是某个连续函数。对于这种选择,我们可以使用条件分布的已知公式 [27, 31, 12]: 注意,这些只是高斯概率路径。因此,可以说前向过程是构造(高斯)概率路径的一种特定方式 。“概率路径” 这一术语由流匹配 [14] 引入,目的是同时简化构造并使其更具一般性:首先,扩散模型的 “前向过程” 实际上从未被完全模拟(训练期间仅抽取来自 的样本 )。其次,前向过程仅在 时收敛(即我们永远无法在有限时间内到达 )。因此,我们选择在本文档中使用概率路径。
时间反转与求解福克 - 普朗克方程
扩散模型的原始描述不是通过福克 - 普朗克方程(或连续性方程)构造训练目标 或 ,而是通过前向过程的时间反转(time-reversal) [2] 。时间反转 是一个随机微分方程,其轨迹上的分布在时间上反转,即: 对于所有 和 成立 [59]。
如 Anderson [2] 所示,可以通过以下随机微分方程得到满足上述条件的时间反转: 由于 ,上述对应于我们在命题 1 中推导的训练目标的一个特定实例(由于使用了不同的时间约定,这并非显而易见。例如,参见 [15] 以获取推导 )。然而,对于生成式建模的目的,我们通常仅使用马尔可夫过程的最终点 (例如,作为生成的图像 ),而舍弃更早的时间点。因此,马尔可夫过程是否是 “真正的” 时间反转或遵循概率路径,对于许多应用来说并不重要。因此,使用时间反转不是必需的,而且常常导致次优结果,例如,概率流常微分方程通常更好 [12, 17] 。从扩散模型采样的所有方法都与时间反转不同,它们再次依赖于使用福克 - 普朗克方程。我们希望这能说明为什么如今许多人直接通过福克 - 普朗克方程构造训练目标,这一方法由 [14, 16, 1] 开创,并在本课程中使用。
流匹配 [14] 与随机插值 [1]
我们呈现的框架与流匹配和随机插值(SIs)框架最为相关。如我们所学,流匹配将自身限制在流上。事实上,流匹配的关键创新之一是表明,无需通过前向过程和随机微分方程构造,仅通过流模型就可以以可扩展的方式训练扩散模型。由于这种限制,你应该记住,从流匹配模型采样将是确定性的(仅初始 需要随机 )。随机插值包括纯流和通过我们在这里使用的 “朗之万动力学” 进行的随机微分方程扩展(见定理 13 )。随机插值得名于插值函数 ,旨在在两个分布之间进行插值。在我们使用的术语中,这对应于构造条件和边缘概率路径的另一种(主要是)等价方式。流匹配和随机插值相对于扩散模型的优势在于它们的简单性和通用性:它们的训练框架非常简单,但同时允许你通过任意概率路径 将任意分布 转换为任意分布 ,而去噪扩散模型仅适用于高斯初始分布和高斯概率路径。这为生成式建模开辟了新的可能性,我们将在本课程后面简要提及。
现在,我们总结本节的结果:
总结 23(训练生成式模型)
流匹配(Flow matching) 包括通过最小化条件流匹配损失(conditional flow matching loss) 来训练神经网络 : ( 条 件 流 匹 配 损 失 ) 其中 是条件向量场(见算法 5 )。训练完成后,通过模拟相应的常微分方程(见算法 1 )生成样本。要将其扩展为扩散模型,我们可以使用得分网络(score network) ,并通过条件得分匹配(conditional score matching) 对其进行训练: ( 去 噪 得 分 匹 配 损 失 ) 对于每个扩散系数 ,模拟随机微分方程(例如,通过算法 2 ): 将生成来自 的近似样本。可以通过经验找到最优的 。
高斯概率路径
对于高斯概率路径 的特殊情况,条件得分匹配也被称为去噪得分匹配(denoising score matching) 。此时,损失和条件流匹配损失由下式给出: 在这种情况下,无需分别训练 和 ,因为我们可以在训练后通过以下公式转换它们: 同样,训练完成后,我们可以通过算法 2 模拟方程(62)中的随机微分方程,以得到样本 。
去噪扩散模型
去噪扩散模型是具有高斯概率路径的扩散模型。因此,对它们来说,学习 或 就足够了,因为它们可以相互转换。
虽然流匹配仅允许通过常微分方程进行确定性模拟,但它们允许进行确定性(概率流常微分方程)或随机性(随机微分方程采样)模拟。然而,与流匹配或随机插值不同,流匹配或随机插值允许通过任意概率路径 将任意分布 转换为任意分布 ,而去噪扩散模型仅适用于高斯初始分布 和高斯概率路径。
文献
文献中流行的扩散模型替代公式有:
离散时间(Discrete-time) :常通过离散时间马尔可夫链对随机微分方程进行近似。
反转时间约定(Inverted time convention) :使用反转时间约定很流行,其中 对应于 (与本文中 对应于 相反 )。
前向过程(Forward process) :前向过程(或加噪过程)是构造(高斯)概率路径的方式。
通过时间反转构造训练目标(Training target via time-reversal) :训练目标也可以通过随机微分方程的时间反转来构造。这是本文呈现的构造的一个特定实例(使用反转时间约定 )。
5 构建图像生成器
在前几节中,我们学习了如何训练流匹配或扩散模型,从分布 中采样。这个方法具有通用性,可应用于不同的数据类型和应用场景。在本节中,我们将学习如何应用这个框架来构建图像或视频生成器,比如 Stable Diffusion 3 和 Meta Movie Gen Video 。要构建这样的模型,我们还缺少两个主要要素:首先,我们需要制定条件生成引导(guidance) ,例如,如何生成符合特定文本提示的图像,以及我们现有的目标如何适当地调整以实现这一点。我们还将学习无分类器引导(classifier-free guidance),这是一种用于提升条件生成质量的流行技术。其次,我们将讨论常见的神经网络架构,再次聚焦于为图像和视频设计的架构。最后,我们将深入研究前面提到的两个先进图像和视频模型 ——Stable Diffusion 和 Meta MovieGen ,让你了解大规模应用时的做法。
5.1 引导(Guidance)
到目前为止,我们考虑的生成模型都是无条件的 ,例如,图像模型会简单地生成一些图像。然而,任务不只是生成任意物体,而是生成以额外信息为条件 的物体。例如,可以设想一个图像生成模型,它接收文本提示 y ,然后生成以 y 为条件的图像 x 。对于固定提示 y ,我们希望从 中采样,即由 y 引导的数据分布。形式上,我们认为 y 存在于空间 中。当 y 对应文本提示时,例如, 可能是像 这样的连续空间。当 y 对应离散类别标签时, 是离散的。在实验中,我们将使用 MNIST 数据集,此时我们取 ,对应手写数字的标识。
为避免与用于表示以 为条件(条件概率路径 / 向量场)的 “conditional(条件的)” 一词在符号和术语上冲突,我们将使用guided(引导的) 一词专门表示以 y 为条件的情况。
说明 24(引导与条件的术语) 在这些笔记中,为表示以 y 为条件的行为,我们选择使用 “guided(引导的)” 而非 “conditional(条件的)”。在此,我们将提及例如引导向量场 和条件向量场 。此术语与其他工作(如 [15] )一致。
引导式生成建模(guided generative modeling) 的目标是能够从任意 y 对应的 中采样。在流匹配和得分匹配的语境中,我们的生成模型对应常微分方程和随机微分方程的模拟,这可以表述如下。
关键思路 5(引导式生成模型) 我们将引导式扩散模型(guided diffusion model) 定义为由引导向量场(guided vector field) 构成,该向量场由某个神经网络参数化,以及与时间相关的扩散系数 ,具体如下:
神经网络(Neural network) : ,
固定项(Fixed) : ,
注意与总结 7 的区别:我们额外用输入 引导 。对于任意 ,可按如下方式从这样的模型生成样本:
初始化(Initialization) : —— 用简单分布(如高斯分布)初始化
模拟(Simulation) : —— 从 到 模拟随机微分方程
目标(Goal) : —— 目标是让 的分布类似于
当 时,我们称这样的模型为引导式流模型(guided flow model) 。
5.1.1 流模型的引导
假设我们确定选择 y ,并将数据分布视为 ,那么我们就回到了无引导的生成问题,并且可以相应地使用条件流匹配目标来构造生成模型,即: 注意,标签 y 不会影响条件概率路径 或条件向量场 (尽管原则上我们可以让其依赖于 y )。对所有这样的 y 选择以及所有 扩展期望,我们得到引导式条件流匹配目标(guided conditional flow matching objective) : 方程(64)中的引导目标与方程(44)中的无引导目标的主要区别之一是,这里我们采样 ,而不仅仅是 。原因是我们的数据分布原则上是关于例如图像 z 和文本提示 y 的联合分布。在实践中,这意味着方程(64)的 PyTorch 实现将涉及一个数据加载器,返回 z 和 y 的批次。上述流程会得到忠实生成 的过程。
无分类器引导(Classifier-Free Guidance) 虽然上述条件训练流程在理论上是有效的,但很快人们发现,用这个流程生成的图像样本与期望标签 y 并不足够契合。人们发现,当人工强化引导变量 y 的影响时,感知质量会提高。这一见解被提炼为一种称为无分类器引导(classifier-free guidance) 的技术,广泛应用于先进的扩散模型中,我们接下来将讨论它。为简单起见,我们在此聚焦于高斯概率路径的情况。回顾方程(16),高斯条件概率路径由下式给出: 其中噪声调度器 和 是连续可微、单调的,且满足 以及 。为理解无分类器引导,我们可以使用命题 1,用引导得分函数 将引导向量场 重写为以下形式: 其中 然而,注意到根据贝叶斯法则,我们可以将引导得分重写为: 其中我们利用了梯度 是关于变量 x 取的,因此 。因此,我们可以重写: 注意上述方程的形式:引导向量场 是无引导向量场加上引导得分 。当人们观察到他们的图像 x 与提示 y 契合度不够时,自然想到放大 项的贡献,得到: 其中 被称为引导尺度(guidance scale) 。注意,这是一种启发式方法:当 时, ,即不是真正的引导向量场。然而,经验结果表明(当 时 )能产生更优结果。
说明 25(分类器在哪里?) 项 可以被视为带噪数据的一种分类器(即它给出给定 x 时 y 的似然 )。实际上,扩散模型的早期工作中训练了实际的分类器,并通过上述流程用它们进行引导。这导致了分类器引导(classifier guidance) [5, 30] 。由于它在很大程度上已被无分类器引导取代,我们在此不考虑它。
我们可以再次应用等式: 以得到: 因此,我们可以将缩放后的引导向量场 表示为无引导向量场 与引导向量场 的线性组合。那么,思路可能是训练无引导的 (例如,使用方程(44) )以及引导的 (例如,使用方程(64) ),然后在推理时将它们结合以得到 。“但等等!” 你可能会问,“我们难道不需要训练两个模型吗?” 事实证明我们可以不用。在训练时,我们可以扩充无标签数据集,添加一个新的、额外的标签 ,表示无约束条件(absence of conditioning) 。然后,我们可以将 。这样,我们不需要训练单独的模型来强化假设的分类器的效果。这种训练条件模型和无条件模型于一体(并随后强化约束条件)的方法被称为无分类器引导(classifier-free guidance, CFG) [10] 。
说明 26(一般概率路径的推导) 注意,构造: 对于任意概率路径的选择都有效,而不仅限于高斯路径。当 时,可直接验证 。我们使用高斯路径的推导只是为了说明构造背后的直观认识,特别是放大 “分类器” 贡献的部分。
训练与无上下文引导(Training and Context-Free Guidance) 我们必须修正方程(64)中的条件流匹配目标,以考虑 的可能性。挑战在于,当采样 时,我们永远不会得到 。因此,我们必须人为引入 的可能性。为此,我们将定义超参数 为舍弃原始标签 y 并替换为 的概率。由此,我们得到CFG 条件流匹配训练目标(CFG conditional flow matching training objective) :
以 概 率 将 替 换 为
我们将研究结果总结如下。
总结 27(流模型的无分类器引导) 给定无引导的边缘向量场 、引导的边缘向量场 ,以及引导尺度 ,我们定义无分类器引导向量场(classifier-free guided vector field) 为: 通过用同一个神经网络逼近 和 ,我们可以利用以下无分类器引导 CFM(CFG-CFM) 目标:
以 概 率 将 替 换 为
用通俗的英语表述, 可近似为:
—— 从数据分布中采样
—— 在 上均匀采样 t
—— 从条件概率路径 中采样 x
以概率 ,令 —— 以概率 将 y 替换为
—— 针对条件向量场回归模型
上面,我们多次利用了 这一事实。在推理时,对于给定的 y 选择,我们可以通过以下方式生成样本:
初始化(Initialization) : —— 用简单分布(如高斯分布)初始化
模拟(Simulation) : —— 从 到 模拟常微分方程
样本(Samples) : —— 目标是让 符合引导变量 y
注意,如果我们使用权重 , 的分布不一定再与 对齐。然而,经验表明这与条件约束更契合。在图 11 中,我们将基于类别的无分类器引导应用于 CIFAR-10 数据集时,展示了其效果,如 [10] 中所述。类似地,在图 12 中,我们可视化了对 MNIST 手写数字数据集采样时,不同引导尺度 w 的影响。
图 11 :分类器引导的效果。此处的提示 “类别(class)” 选为 “柯基犬(Corgi,一种特定犬种)”。左:无引导(即 )生成的样本。右:使用分类器引导且 生成的样本。如图所示,无分类器引导改进了与提示的相似度。图片取自 [10] 。
通过用同一个神经网络逼近 和 ,我们可以利用以下无分类器引导 CFM(CFG-CFM) 目标: 以 概 率 将 替 换 为 在推理时,对于给定的 y 选择,我们可以通过以下方式生成样本:
初始化(Initialization) : —— 用简单分布(如高斯分布)初始化
模拟(Simulation) : —— 从 到 模拟常微分方程
样本(Samples) : —— 目标是让 符合引导变量 y
注意,如果我们使用权重 , 的分布不一定再与 对齐。然而,经验表明这与条件约束更契合。在图 11 中,我们将基于类别的无分类器引导应用于 CIFAR-10 数据集时,展示了其效果,如 [10] 中所述。类似地,在图 12 中,我们可视化了对 MNIST 手写数字数据集采样时,不同引导尺度 w 的影响。(图 11 和图 12 因无实际图片内容,翻译时保留描述 )
5.1.2 扩散模型的引导
在本节中,我们将上一节的推理扩展到扩散模型。首先,类似于得到方程(64)的方式,我们可以推广条件得分匹配损失方程(61),得到引导式条件得分匹配目标(guided conditional score matching objective) : 用方程(73)训练得到的引导式得分网络(guided score network) ,可与引导式向量场 结合,用于模拟随机微分方程(SDE):
无分类器引导
我们现在将无分类器引导构造扩展到扩散模型场景。根据贝叶斯法则(参见方程(67) ): 对于引导尺度 ,我们可定义: 由此,我们得到与(考虑 可能性的)CFG 兼容的目标:
以 概 率 将 替 换 为
其中 是超参数(将 y 替换为 的概率 )。我们将 称为引导式条件得分匹配目标(guided conditional score matching objective) 。总结如下:
总结 28(扩散模型的无分类器引导)
给定无引导的边缘得分场 、引导的边缘得分场 ,以及引导尺度 ,我们定义无分类器引导得分(classifier-free guided score) 为:
通过用同一个神经网络 逼近 和 ,我们可利用以下无分类器引导 CSM(CFG-CSM) 目标:
以 概 率 将 替 换 为
用通俗的语言表述, 可近似为:
—— 从数据分布采样
—— 在 上均匀采样 t
—— 从条件路径 采样 x
以概率 ,令 —— 以概率 将 y 替换为
—— 针对条件得分回归模型
在推理时,对于选定的 ,我们可将 与引导式向量场 结合,定义: 然后,我们可按以下方式采样:
初始化(Initialization) : —— 用简单分布(如高斯分布)初始化
模拟(Simulation) : —— 从 到 模拟 SDE
样本(Samples) : —— 目标是让 符合引导变量 y
5.2 神经网络架构
接下来,我们讨论用于流模型和扩散模型的神经网络设计。具体而言,我们要解决的问题是,如何构建一个神经网络架构,以参数 表示(引导式)向量场 。需要注意的是,该神经网络必须有 3 个输入 —— 向量 、条件变量 ,以及时间值 ,还有 1 个输出 —— 向量 。对于低维分布(比如前几节中见过的示例分布 ),将 参数化为多层感知机(MLP,也称为全连接神经网络 )就足够了。也就是说,在这种简单场景中,前向传播计算 时,会将输入 x 、y 和 t 拼接起来,再传入 MLP。然而,对于复杂的高维分布,比如图像、视频和蛋白质相关的分布,MLP 往往不够用,通常会使用特殊的、针对特定应用的架构。在本节剩余部分,我们将考虑图像(以及视频,可扩展而言 ) 的情况,讨论两种常见架构:U-Net [25] 和扩散变换器(DiT)。
5.2.1 U-Net 与扩散变换器
在深入研究这些架构的细节之前,先回顾一下引言内容,图像本质上就是向量 。其中 表示通道数 (一幅 RGB 图像通常有 个颜色通道 ),H 表示图像的高度 (以像素为单位 ),W 表示图像的宽度 (以像素为单位 )。
U-Net :U-Net 架构 [25] 是一种特定类型的卷积神经网络。它最初是为图像分割设计的,关键特征是其输入和输出的形状都与图像一致(通道数可能不同 )。这使得它非常适合对向量场 进行参数化,因为对于固定的 y 和 t ,其输入和输出的形状都是图像形状。因此,U-Net 在扩散模型的开发中被广泛使用。U-Net 由一系列编码器 、对应的一系列解码器 ,以及中间的一个潜在处理模块(我们称之为中间编码器(midcoder) ,文献中通常用这个术语 )组成。为方便举例,我们来梳理一下图像 (我们取 )在 U-Net 中处理的路径: 输 入 到 通 过 编 码 器 得 到 潜 在 表 示 将 潜 在 表 示 传 入 中 间 编 码 器 通 过 解 码 器 得 到 输 出 注意,当输入通过编码器时,其表示的通道数增加,而图像的高度和宽度减小。编码器和解码器通常都由一系列卷积层组成(中间包含激活函数、池化操作等 )。有两点上述内容未提及:首先,输入 通常会先传入一个编码前模块,以在进入第一个编码器块之前增加通道数。其次,编码器和解码器之间通常通过残差连接(residual connections) 连接。完整的架构如图 13 所示。从宏观层面看,大多数 U-Net 都包含上述描述的变体。不过,上述提到的某些设计选择在实际不同实现中可能有差异。特别是,我们采用的是纯卷积架构,而在整个编码器和解码器中加入注意力层也很常见。U-Net 因其编码器和解码器构成的 “U” 形结构而得名(见图 13 )。
扩散变换器(Diffusion Transformers) :U-Net 的一种替代方案是扩散变换器(DiTs) ,它摒弃了卷积,完全使用注意力机制 [35, 19] 。扩散变换器基于视觉变换器(ViTs),其核心思路是将图像分割成 patches ,对每个 patch 进行嵌入,然后在 patches 之间进行注意力操作 [6] 。Stable Diffusion 3 采用条件流匹配训练,将速度场 参数化为一种改进的 DiT,我们将在 5.3 节详细讨论 [7] 。
说明 29(在潜在空间中工作) 大规模应用中一个常见问题是,数据维度太高,会占用过多内存。例如,我们可能想要生成 1000×10000 像素的高分辨率图像,这会涉及 100 万(!)维数据。为减少内存使用,一种常见设计模式是在潜在空间(latent space) 中工作,潜在空间可视为数据的压缩版(分辨率更低 )。具体而言,常用方法是将前馈或扩散模型与(变分)自动编码器(autoencoder) 结合 [24] 。在这种情况下,我们首先通过自动编码器将训练数据集转换到潜在空间,然后在潜在空间中训练流模型或扩散模型。采样时,先使用训练好的流模型或扩散模型在潜在空间中采样,再通过解码器对输出进行解码。直观地说,训练良好的自动编码器可被视为过滤掉语义无关细节,让生成模型能够 “聚焦” 于重要的、感知相关的特征 [24] 。目前,几乎所有先进的图像和视频生成方法都涉及在自动编码器的潜在空间中训练流模型或扩散模型 —— 即所谓的潜在扩散模型(latent diffusion models) [24, 34] 。不过,需要注意的是:在训练扩散模型之前,也需要先训练自动编码器。关键是,性能现在还取决于自动编码器将图像压缩到潜在空间并恢复出美观图像的效果如何。
5.2.2 编码引导变量
到目前为止,我们一直没详细说引导(条件)变量 y 是如何传入神经网络 的。大致而言,这个过程可分解为两个步骤:将原始输入 (比如文本提示 “a cat playing a trumpet, photorealistic(一只吹小号的猫,照片级真实感 )” )嵌入为向量值输入 y ,然后将得到的 y 传入实际模型。现在我们详细描述每个步骤。
嵌入原始输入(Embedding Raw Input) :这里,我们考虑两种情况:(1) 是离散类别标签;(2) 是文本提示。当 是类别标签时,最简单的做法通常是为 的每个可能值单独嵌入一个向量,然后将这个嵌入向量作为 y 。我们会把这些嵌入的参数视为 参数的一部分,在训练过程中学习这些参数。当 是文本提示时,情况更复杂,方法通常依赖于冻结的、预训练的模型。这类模型经过训练,可将离散输入嵌入到连续向量中,以捕捉相关信息。其中一种模型是 CLIP(对比语言 - 图像预训练,Contrastive Language-Image Pretraining )。CLIP 旨在学习图像和文本提示的共享嵌入空间,使用的训练损失会促使图像嵌入靠近其对应提示的嵌入,同时远离其他图像和提示的嵌入 [22] 。因此,我们可以取 作为冻结预训练 CLIP 模型产生的嵌入。在某些情况下,CLIP 可能无法将整个序列压缩为单个表示。这时,人们可能还会考虑使用预训练变换器对提示进行解嵌入,以得到嵌入序列。在进行条件约束时,结合多个这样的预训练嵌入也很常见,这样可以同时利用每个模型的优势 [7, 21] 。
传入嵌入(Feeding in the Embedding) :假设我们已经得到了嵌入向量 。接下来怎么做?方法有多种,但通常都是以下方式的变体:将其单独传入图像架构的每个子组件。我们简要描述一下实验三中使用的 U-Net 实现里是如何做到这一点的,如图 13 所示。在网络的某个中间位置,我们希望将来自 的信息注入当前激活 。我们可以用以下类 PyTorch 伪代码所示的过程实现: 将 从 映 射 到 将 重 塑 为 类 图 像 形 状 逐 点 将 加 到 这种简单逐点条件约束方案的一个例外情况是,当我们有由某些预训练语言模型产生的嵌入序列时。在这种情况下,我们可能会考虑在图像(适当分块后 )和嵌入序列的标记之间使用某种交叉注意力机制。我们将在 5.3 节看到多个这样的例子。
5.3 大规模图像和视频模型综述
在本节结尾,我们将简要考察两个大规模生成模型:用于图像生成的 Stable Diffusion 3 和用于视频生成的 Meta Movie Gen Video [7, 21] 。如你将看到的,这些模型运用了我们在本文中介绍的技术,同时结合了额外的架构改进,以实现模型扩展并适配如文本输入等结构丰富的条件模态。
5.3.1 Stable Diffusion 3
Stable Diffusion 是一系列先进的图像生成模型。这些模型是首批使用大规模潜在扩散模型进行图像生成的模型之一。如果你还没试过,强烈建议你在线测试(https://stability.ai/news/stable-diffusion-3 )。
Stable Diffusion 3 采用了我们在本文中研究的条件流匹配目标(见算法 5 )。如其论文所述,它广泛测试了各种流和扩散变体,发现流匹配在训练时表现最佳,训练时使用了无分类器引导训练(舍弃类别标签 ),如前所述。此外,Stable Diffusion 3 遵循 5.2 节介绍的方法,在预训练自动编码器的潜在空间中进行训练。训练良好的自动编码器是早期 Stable Diffusion 论文的一大贡献。
为增强文本条件约束,Stable Diffusion 3 使用了 3 种不同类型的文本嵌入(包括 CLIP 嵌入,以及由预训练的编码器(如 Google 的 T5-XXL )产生的序列输出 [3, 26] )。CLIP 嵌入为输入文本提供了粗略的概述,而 T5 嵌入提供了更细致的上下文,使模型有可能关注条件文本的特定元素。为适配这些序列上下文嵌入,作者提议扩展扩散变换器,使其不仅能关注图像的分块,还能关注文本嵌入。从而将原本为 DiT 提出的基于类别的条件约束方案扩展到序列上下文嵌入。这种经过修改的 DiT 被称为多模态 DiT(MM-DiT) ,如图 15 所示。其最终的最大模型有 80 亿个参数。在采样时,它们使用欧拉模拟方案,进行 50 步采样(即需要评估网络 50 次 ),并采用 2.0 - 5.0 之间的无分类器引导权重。
接下来,我们讨论 Meta 的视频生成器 Movie Gen Video(https://ai.meta.com/research/movie-gen/ )。与图像不同,视频的数据 x 位于空间 中,其中 T 代表新的时间维度 (即帧数 )。正如我们将看到的,在视频场景中做出的许多设计选择,都可以看作是将现有技术(如自动编码器、扩散变换器等 )从图像场景适配到处理这一额外时间维度。
Movie Gen Video 使用与 CondOT 路径相同的条件流匹配目标(见算法 5 )。与 Stable Diffusion 3 类似,Movie Gen 也在冻结的、预训练的自动编码器的潜在空间中运行。需要注意的是,对于视频而言,自动编码器减少内存消耗甚至比图像更重要,这就是为什么目前大多数视频生成器生成的视频长度都相当有限。具体来说,作者提议通过引入时间自动编码器(TAE) 来处理新增的时间维度,该编码器将原始视频 映射到潜在空间 ,其中 [21] 。为适配视频,提出了一种时间分块程序,即视频被分割为帧块,每个块由编码器单独编码,然后将潜在表示拼接在一起 [21] 。模型本身(即 )基于类 DiT 的骨干网络,其中 沿时间和空间维度进行分块。然后,图像块被传入一个变换器,该变换器同时在图像块之间使用自注意力,并与语言模型嵌入进行交叉注意力,类似于 Stable Diffusion 3 使用的 MM-DiT。对于文本条件约束,Movie Gen Video 使用了三种类型的文本嵌入:UL2 嵌入,用于细致的、基于文本的推理 [33] ;ByT5 嵌入,用于字符级细节(例如,明确要求特定文本存在的提示 [36] );以及 MetaCLIP 嵌入,在共享的文本 - 图像嵌入空间中训练 [13, 21] 。其最终的最大模型有 300 亿个参数。如需更详细和全面的介绍,我们建议读者查阅 Movie Gen 的技术报告本身 [21] 。
6 致谢
如果没有众多人员的慷慨支持,本课程就不可能问世。我们要感谢 Tommi Jaakkola 担任本课程的顾问和教员赞助人,并在整个过程中提供了富有见地的反馈。我们要感谢 Christian Fiedler、Tim Griesbach、Benedikt Geiger 和 Albrecht Holderrieth 对讲义提供的宝贵反馈。此外,我们感谢 MIT 开放学习中心的 Elaine Mello 在课程录制方面提供的支持,以及开放与通用学习学生组织的 Ashay Athalye 帮助剪辑和处理视频。我们还要感谢 Cameron Diao、Tally Portnoi、Andi Qu、Roger Trullo、Ádám Burián、Zewen Yang 以及许多其他人为实验做出的宝贵贡献。我们同样要感谢 Lisa Bella、Ellen Reid 以及 MIT 电子工程与计算机科学系(EECS)的所有人员提供的慷慨支持。最后,我们要感谢原始课程(MIT 6.S184/6.S975,于 2025 年 IAP 期间授课 )的所有参与者,以及像你这样对本课程感兴趣的读者。谢谢!
A 概率论知识回顾
我们简要概述概率论的基本概念。本节部分内容取自 [15]。
A.1 随机向量
考虑 d 维欧几里得空间中的数据 ,其标准欧几里得内积为 ,范数为 。我们将考虑取值于 的随机变量(RVs)X,其具有连续概率密度函数(PDF),定义为连续函数 ,使得事件 A 发生的概率为: 其中 。为简洁起见,积分时省略积分区间(默认对整个空间积分)。为使符号简洁,我们将随机变量 X 的 PDF 简记为 p。我们用符号 或 表示 X 服从分布 p。生成建模中常见的一种 PDF 是 d 维各向同性高斯分布: 其中 和 分别表示分布的均值和标准差。
随机变量的期望是在最小二乘意义下最接近 X 的常向量: 计算随机变量函数期望的一个有用工具是无意识统计学家定律(law of the unconscious statistician) : 必要时,我们会在期望中指明随机变量,记为 。
A.2 条件密度与期望
给定两个随机变量 ,它们的联合 PDF 具有边缘分布: 和 图 16 展示了 ( )中两个随机变量联合 PDF 及其边缘分布 (阴影部分)和 (黑色线条)的示例。条件 PDF 描述了在事件 (且 )条件下随机变量 X 的 PDF: 类似地可定义条件 PDF 。贝叶斯法则(Bayes' rule) 用 表示 : 其中 。
条件期望 是在最小二乘意义下最接近 X 的函数 : 对于 的 ,条件期望函数为: 第二个等式源于在式(87)中对 取内层括号的极小值,类似于式(82)。将 与随机变量 Y 组合,得到: 这是 中的随机变量。需要注意的是, 和 常都被称为条件期望,但它们是不同的对象。具体而言, 是函数 ,而 是取值于 的随机变量。为区分这两个术语,我们的讨论将使用此处引入的符号。
塔式性质(tower property) 是有助于简化涉及两个随机变量 X 和 Y 的条件期望推导的有用性质: 因为 是随机变量(本身是 Y 的函数),外层期望计算的是 的期望。塔式性质可通过上述定义验证: 最后,考虑涉及两个随机变量函数 和 Y 的有用性质(其中 X 和 Y 是任意随机变量 )。利用式(88)和无意识统计学家定律,可得恒等式:
B 福克 - 普朗克方程的证明
本节给出福克 - 普朗克方程(定理 15)的自包含证明,其中连续性方程作为特例(定理 12)。需要强调的是,理解本文其余部分无需阅读本节,且其数学难度较高。若你希望了解福克 - 普朗克方程的来源,可阅读此部分。
我们首先证明福克 - 普朗克方程是必要条件,即若 ,则福克 - 普朗克方程成立。证明的关键是使用测试函数(test functions) f,即 是无穷可微(“光滑”)且仅在有界区域(紧支集)内非零的函数。我们利用以下事实:对于任意可积函数 ,有: 对 所 有 对 所 有 测 试 函 数 换言之,我们可将逐点相等表示为积分相等 。测试函数的有用之处在于它们是光滑的,即我们可计算梯度和高阶导数 。特别地,对于任意测试函数 ,我们可使用分部积分(integration by parts) : 结合散度和拉普拉斯算子的定义(见式(23) ),可得恒等式: 现在开始证明。我们使用式(6)中随机微分方程(SDE)轨迹的随机更新: 为便于阅读,我们暂时忽略误差项 ,因为最终会取 。然后进行如下计算: 其中(i)步使用了 f 在 处的二阶泰勒近似,(ii)步利用了海森矩阵 是对称矩阵的事实。注意到 且 。因此: (i)步利用了 ,(ii)步利用了拉普拉斯算子和海森矩阵的定义。由此可得: (i)步假设 是 的分布,(ii)步使用了式(94)和式(95)。因此,有: 对 所 有 和 对 所 有 和 对 所 有 和 对 所 有 (i)步利用了 的假设,(ii)步交换了导数与积分的顺序,(iii)步使用了式(92)。这就完成了福克 - 普朗克方程作为必要条件的证明。
最后,我们解释为什么它也是充分条件。福克 - 普朗克方程是一个偏微分方程(PDE)。更具体地说,它是一种所谓的抛物型偏微分方程。与定理 3 类似,给定固定的初始条件,这样的微分方程有唯一解(参见例如 [8, 第 7 章] )。现在,如果式(30)对 成立,我们上面已经证明它也必须对 的真实分布 (即 )成立 —— 换句话说, 和 都是抛物型 PDE 的解。此外,我们知道初始条件是相同的,即通过构造插值概率路径(参见??), 。因此,根据微分方程解的唯一性,我们知道对于所有 , —— 这意味着 ,这正是我们想要证明的。